//package com.ruoyi.gateway.config;
//
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.http.HttpHeaders;
//import org.springframework.http.HttpMethod;
//import org.springframework.http.HttpStatus;
//import org.springframework.http.server.reactive.ServerHttpRequest;
//import org.springframework.http.server.reactive.ServerHttpResponse;
//import org.springframework.web.cors.reactive.CorsUtils;
//import org.springframework.web.server.ServerWebExchange;
//import org.springframework.web.server.WebFilter;
//import org.springframework.web.server.WebFilterChain;
//import reactor.core.publisher.Mono;
//
///**
// * <p>
// * 作用：跨域
// * </p>
// *
// * @author 张连宝
// * @since 2025-01-13 20:35
// */
//@Configuration
//public class CorsConfig {
//
//  private static final String ALLOWED_HEADERS = "*";
//  private static final String ALLOWED_METHODS = "GET,POST,PUT,DELETE,OPTIONS,HEAD";
//  private static final String ALLOWED_ORIGIN = "*";
//  private static final String ALLOWED_EXPOSE = "*";
//  private static final String MAX_AGE = "18000L";
//
//  @Bean
//  public WebFilter corsFilter() {
//    return (ServerWebExchange ctx, WebFilterChain chain) -> {
//      ServerHttpRequest request = ctx.getRequest();
//      if (CorsUtils.isCorsRequest(request)) {
//        ServerHttpResponse response = ctx.getResponse();
//        HttpHeaders headers = response.getHeaders();
//        headers.add("Access-Control-Allow-Headers", ALLOWED_HEADERS);
//        headers.add("Access-Control-Allow-Methods", ALLOWED_METHODS);
//        headers.add("Access-Control-Allow-Origin", ALLOWED_ORIGIN);
//        headers.add("Access-Control-Expose-Headers", ALLOWED_EXPOSE);
//        headers.add("Access-Control-Max-Age", MAX_AGE);
//        headers.add("Access-Control-Allow-Credentials", "true");
//        if (request.getMethod() == HttpMethod.OPTIONS) {
//          response.setStatusCode(HttpStatus.OK);
//          return Mono.empty();
//        }
//      }
//      return chain.filter(ctx);
//    };
//  }
//}
